package terceroclase;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;


public class Lector 
{
	// Atributos.
	private BufferedReader br = null;
	
	/**
     * Construye e inicializa el objeto para que pueda leer informaci�n
     * del teclado. 
     */
	public Lector()
	{
		this.br = new BufferedReader(new InputStreamReader(System.in));
	}
	
	/**
     * Lee un byte por teclado. Utiliza la tecla "Enter" para indicar el final del dato.
     *
     * @return     el byte introducido o 0 si se produjo alg�n problema.
     */
	public byte leerByte()
	{
		byte tmp = 0;
		try 
		{
			tmp = Byte.parseByte(br.readLine());
		}
		catch (NumberFormatException ex) 
		{
			System.out.println("Error: el dato introducido no se puede convertir en un byte.");
			ex.printStackTrace();
		}
		catch (IOException ex) 
		{
			System.out.println("Error: hubo un problema en la operaci�n de entrada de datos.");
			ex.printStackTrace();
		}
		catch(Exception ex)
		{
			System.out.println("Error: hubo un problema no controlado.");
			ex.printStackTrace();
		}
		return tmp;
	}

	/**
     * Lee un short por teclado. Utiliza la tecla "Enter" para indicar el final del dato.
     *
     * @return     el short introducido o 0 si se produjo alg�n problema.
     */
	public short leerShort()
	{
		short tmp = 0;
		try 
		{
			tmp = Short.parseShort(br.readLine());
		}
		catch (NumberFormatException ex) 
		{
			System.out.println("Error: el dato introducido no se puede convertir en un short.");
			ex.printStackTrace();
		}
		catch (IOException ex) 
		{
			System.out.println("Error: hubo un problema en la operaci�n de entrada de datos.");
			ex.printStackTrace();
		}
		catch(Exception ex)
		{
			System.out.println("Error: hubo un problema no controlado.");
			ex.printStackTrace();
		}
		return tmp;
	}
	
	/**
     * Lee un char por teclado. Utiliza la tecla "Enter" para indicar el final del dato.
     *
     * @return     el primer char introducido o un blanco si se produjo alg�n problema.
     */
	public char leerChar()
	{
		char tmp = ' ';
		try 
		{
			tmp = br.readLine().charAt(0);
		}
		catch (IOException ex) 
		{
			System.out.println("Error: hubo un problema en la operaci�n de entrada de datos.");
			ex.printStackTrace();
		}
		catch(Exception ex)
		{
			System.out.println("Error: hubo un problema no controlado.");
			ex.printStackTrace();
		}
		return tmp;
	}

	/**
     * Lee un int por teclado. Utiliza la tecla "Enter" para indicar el final del dato.
     *
     * @return     el int introducido o 0 si se produjo alg�n problema.
     */
	public int leerInt()
	{
		int tmp = 0;
		try 
		{
			tmp = Integer.parseInt(br.readLine());
		}
		catch (NumberFormatException ex) 
		{
			System.out.println("Error: el dato introducido no se puede convertir en un int.");
			ex.printStackTrace();
		}
		catch (IOException ex) 
		{
			System.out.println("Error: hubo un problema en la operaci�n de entrada de datos.");
			ex.printStackTrace();
		}
		catch(Exception ex)
		{
			System.out.println("Error: hubo un problema no controlado.");
			ex.printStackTrace();
		}
		return tmp;
	}
	
	/**
     * Lee un long por teclado. Utiliza la tecla "Enter" para indicar el final del dato.
     *
     * @return     el long introducido o 0 si se produjo alg�n problema.
     */
	public long leerLong()
	{
		long tmp = 0;
		try 
		{
			tmp = Long.parseLong(br.readLine());
		}
		catch (NumberFormatException ex) 
		{
			System.out.println("Error: el dato introducido no se puede convertir en un long.");
			ex.printStackTrace();
		}
		catch (IOException ex) 
		{
			System.out.println("Error: hubo un problema en la operaci�n de entrada de datos.");
			ex.printStackTrace();
		}
		catch(Exception ex)
		{
			System.out.println("Error: hubo un problema no controlado.");
			ex.printStackTrace();
		}
		return tmp;
	}

	/**
     * Lee un float por teclado. Utiliza la tecla "Enter" para indicar el final del dato.
     *
     * @return     el float introducido o 0.0 si se produjo alg�n problema.
     */
	public float leerFloat()
	{
		float tmp = 0;
		try 
		{
			tmp = Float.parseFloat(br.readLine());
		}
		catch (NumberFormatException ex) 
		{
			System.out.println("Error: el dato introducido no se puede convertir en un float.");
			ex.printStackTrace();
		}
		catch (IOException ex) 
		{
			System.out.println("Error: hubo un problema en la operaci�n de entrada de datos.");
			ex.printStackTrace();
		}
		catch(Exception ex)
		{
			System.out.println("Error: hubo un problema no controlado.");
			ex.printStackTrace();
		}
		return tmp;
	}
	
	/**
     * Lee un double por teclado. Utiliza la tecla "Enter" para indicar el final del dato.
     *
     * @return     el double introducido o 0.0 si se produjo alg�n problema.
     */
	public double leerDouble()
	{
		double tmp = 0;
		try 
		{
			tmp = Double.parseDouble(br.readLine());
		}
		catch (NumberFormatException ex) 
		{
			System.out.println("Error: el dato introducido no se puede convertir en un double.");
			ex.printStackTrace();
		}
		catch (IOException ex) 
		{
			System.out.println("Error: hubo un problema en la operaci�n de entrada de datos.");
			ex.printStackTrace();
		}
		catch(Exception ex)
		{
			System.out.println("Error: hubo un problema no controlado.");
			ex.printStackTrace();
		}
		return tmp;
	}
	
	/**
     * Lee una cadena de caracteres por teclado. Utiliza la tecla "Enter" para indicar el final del dato.
     *
     * @return     el string introducido o <code>null</code> si se produjo alg�n problema.
     */
	public String leerString()
	{
		String tmp = null;
		try 
		{
			tmp = br.readLine();
		}
		catch (IOException ex) 
		{
			System.out.println("Error: hubo un problema en la operaci�n de entrada de datos.");
			ex.printStackTrace();
		}
		catch(Exception ex)
		{
			System.out.println("Error: hubo un problema no controlado.");
			ex.printStackTrace();
		}
		return tmp;
	}
	
	/**
     * Lee un boolean por teclado. Utiliza la tecla "Enter" para indicar el final del dato.
     *
     * @return     <code>false</code> en cualquier caso a no ser que se introduzca la cadena "true".
     */
	public boolean leerBoolean()
	{
		boolean tmp = false;
		try 
		{
			tmp = new Boolean(br.readLine()).booleanValue();
		}
		catch (IOException ex) 
		{
			System.out.println("Error: hubo un problema en la operaci�n de entrada de datos.");
			ex.printStackTrace();
		}
		catch(Exception ex)
		{
			System.out.println("Error: hubo un problema no controlado.");
			ex.printStackTrace();
		}
		return tmp;
	}
}